package com.xiaozhu.config;

// 引入依赖的类
import jakarta.servlet.http.HttpSession;
import jakarta.websocket.HandshakeResponse;
import jakarta.websocket.server.HandshakeRequest;
import jakarta.websocket.server.ServerEndpointConfig;

/**
 * GetHttpSessionConfig
 * 自定义 WebSocket 配置类，用于在 WebSocket 握手阶段获取 HttpSession 并存入 WebSocket 会话属性中。
 * 这样可以在 WebSocket 端点中访问 HttpSession，实现和 Spring Boot 的 Session 共享。
 */
public class GetHttpSessionConfig extends ServerEndpointConfig.Configurator {

    /**
     * 在 WebSocket 握手阶段调用，在握手阶段获取HttpSession对象
     * @param config WebSocket 配置对象，可以通过它存储用户属性
     * @param request 握手请求对象，可以获取 HttpSession 或请求参数
     * @param response 握手响应对象，可用于修改响应头等
     *
     * shake 摇晃 hand手 Handshake握手
     */
    @Override
    public void modifyHandshake(ServerEndpointConfig config,
                               HandshakeRequest request,
                               HandshakeResponse response) {
        // 从握手请求中获取 HttpSession对象
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        if (httpSession != null) {
            config.getUserProperties().put(HttpSession.class.getName(), httpSession);
        }
    }
}
